/*
 * Classe de mapa. Possui a representação, em forma de matriz,
 * de um mapa.
 */

#include "Tilemap.h"

/**
 * Construtor da tilemap. Recebe o tileset a ser utilizado no mapa,
 * e também seu tamanho.
 *
 * @param tileset o tileset a ser utilizado
 * @param mapWidth a largura do mapa (em número de tiles)
 * @param mapHeight a altura do mapa (em número de tiles)
 *
 */
Tilemap::Tilemap(Tileset *tileset, int mapWidth, int mapHeight) : tileMatrix(boost::multi_array<int, 2> (boost::extents[mapWidth][mapHeight]))
 {

    for(unsigned int i = 0; i < tileMatrix.size(); i++)
    {
        for(unsigned int j = 0; i < tileMatrix[0].size(); i++)
        {
            tileMatrix[i][j] = -1;
        }
    }

    this->tileset = tileset;
    this->mapWidth = mapWidth;
    this->mapHeight = mapHeight;
    camera = new Vector2(0,0);
}

Tilemap::~Tilemap() {
	delete camera;
}

/**
 * Método de renderização do tilemap na tela.
 *
 * @param screen a tela do jogo
 */
void Tilemap::render(SDL_Surface *screen) {


    SDL_Rect rect;

    for(unsigned int i = 0; i < tileMatrix.size(); i++)
    {
        for(unsigned int j = 0; j < tileMatrix[0].size(); j++)
        {
            rect.x = tileset->tileSize*i + camera->x;
            rect.y = tileset->tileSize*j + camera->y;
            SDL_BlitSurface(tileset->tiles.at(tileMatrix[i][j]), NULL, screen, &rect);
        }
    }

}
